/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package clases;


import java.security.MessageDigest;

/**
 * Clase Encriptador
 * Esta clase sirve para facilitar la encriptacion de claves de usuarios en el 
 * sistema.
 * @author Fernando Sahmkow
 */
public class Encriptador {
   
   /// Algoritmo de encriptación a usar.
   private final static String ENCRYPT_ALG = "SHA-256";
   
   /**
    * Esta funcion codifica una cadena 'a' con una clave 'key'
    * @param key clave para encriptar
    * @param a cadena de bytes a encriptar
    */
   private static void encriptacionXor( byte[] a, byte[] key ) {
      final int j = key.length;
      for( int i = 0; i < a.length;  i++)
         a[i] = (byte)(a[i] ^ key[i % j]);
   }

   /**
    * Esta funcion encripta el password del usuario usando como sal el
    * nombre de usuario.
    * @param password clave original que ingresa el usuario.
    * @param username nombre del usuario
    * @return retorna un string de maximo 256 caracteres con la clave encriptada.
    */
   public static String encriptarPassword( String password, String username ) {
      byte[] palabra = password.getBytes();
      encriptacionXor( palabra, username.getBytes() );
      MessageDigest digestor;
      try {
        digestor = MessageDigest.getInstance(ENCRYPT_ALG);
      }
      catch (Exception e) {
          return null;
      }
      digestor.update(palabra);
      byte resultado[] = digestor.digest();
      StringBuffer sb = new StringBuffer();
      for (int i = 0; i < resultado.length; i++)
         sb.append(Integer.toString((resultado[i] & 0xff) + 0x100, 16).substring(1));
      return sb.toString();
   }
   
   /**
    * Esta funcion revisa si el password ingresado es consistente con el almacenado
    * en el sistema.
    * @param pwUser clave que ingreso el usuario
    * @param username nombre del usuario
    * @param pwBD clave almecenada por el sistema.
    * @return retorna verdadero si las claves coinciden, falso en caso contrario.
    */
   public static boolean chequearPassword( String pwUser, String username, String pwBD ) {
      return encriptarPassword(pwUser, username) == pwBD;
   }
   
}